﻿using System;
using System.Text;

namespace InDepth2Demo.Chapter2
{
    public class ValueOrReference
    {
        // 参数 builder 传递的是 引用类型变量的值
        // 值类型的值就是表达式的值，引用类型的表达式，它的值是一个引用。（或者来说是一个指向堆中的地址）
        public static void AppendHello(StringBuilder builder)
        {
            builder.Append("hello");
        }

        public static void Call()
        {
            // 1. 在栈上分配 4 个字节内存，存储变量sb
            // 2. 在堆上开辟内存，存储 实例对象 new StringBuilder("111")
            // 3. sb中的值 是实例的地址
            StringBuilder sb = new StringBuilder("111");

            Console.WriteLine(sb.ToString());              // 111
            AppendHello(sb);                    // 传递的是值的副本，即实例的地址         
            Console.WriteLine(sb.ToString());              // 111hello
        }
    }
}
